package br.com.sap.controle;


import java.util.ArrayList;
import java.util.List;

import br.com.sap.modelo.Categoria;
import br.com.sap.modelo.Modelo;
import br.com.sap.modelo.Tipo;
import br.com.sap.modelo.TipoMarca;
import br.com.sap.modelo.enums.EnumSituacao;
import br.com.sap.persistencia.servico.CategoriaServico;
import br.com.sap.persistencia.servico.MarcaServico;
import br.com.sap.persistencia.servico.ModeloServico;
import br.com.sap.persistencia.servico.ServicoGenerico;
import br.com.sap.persistencia.servico.TipoMarcaServico;
import br.com.sap.persistencia.servico.TipoServico;

public class ModeloControle extends ControleGenerico<Modelo> {

	
	
	private Modelo modelo = new Modelo();
	private ModeloServico modeloServico = new ModeloServico();
	private TipoMarcaServico tipoMarcaServico = new TipoMarcaServico();
	private TipoServico tipoServico = new TipoServico();
	private MarcaServico marcaServico = new MarcaServico();
	private CategoriaServico categoriaServico = new CategoriaServico();
	private TipomarcaControle tipoMarcaControle = new TipomarcaControle(); 
	private ControleGenerico<Modelo> controleGenerico;
	
	public Modelo getModelo() {
		return modelo;
	}

	public void setModelo(Modelo modelo) {
		this.modelo = modelo;
	}

	public ModeloServico getModeloServico() {
		return modeloServico;
	}

	public void setModeloServico(ModeloServico modeloServico) {
		this.modeloServico = modeloServico;
	}

	public TipoMarcaServico getTipoMarcaServico() {
		return tipoMarcaServico;
	}

	public void setTipoMarcaServico(TipoMarcaServico tipoMarcaServico) {
		this.tipoMarcaServico = tipoMarcaServico;
	}

	public TipoServico getTipoServico() {
		return tipoServico;
	}

	public void setTipoServico(TipoServico tipoServico) {
		this.tipoServico = tipoServico;
	}

	public MarcaServico getMarcaServico() {
		return marcaServico;
	}

	public void setMarcaServico(MarcaServico marcaServico) {
		this.marcaServico = marcaServico;
	}

	public CategoriaServico getCategoriaServico() {
		return categoriaServico;
	}

	public TipomarcaControle getTipoMarcaControle() {
		return tipoMarcaControle;
	}

	public void setTipoMarcaControle(TipomarcaControle tipoMarcaControle) {
		this.tipoMarcaControle = tipoMarcaControle;
	}

	public void setCategoriaServico(CategoriaServico categoriaServico) {
		this.categoriaServico = categoriaServico;
	}

	public ControleGenerico<Modelo> getControleGenerico() {
		return controleGenerico;
	}

	public void setControleGenerico(ControleGenerico<Modelo> controleGenerico) {
		this.controleGenerico = controleGenerico;
	}

	@Override
	public ServicoGenerico<Modelo> getServico() {
		// TODO Auto-generated method stub
		return this.modeloServico;
	}
	
	public List<Categoria> getListarCategoria() {
		return categoriaServico.getLista();
	}

	public List<Tipo> getListarTipo(String desccategoria){
		
		
		CategoriaControle categoriaControle = new CategoriaControle();
		List<Categoria> categoriaselecionada = categoriaControle.procuraCategoria(desccategoria, "1");
		
		if(desccategoria != ""){
		if (categoriaselecionada.size() == 1) {
			
				Categoria categoriaServico = categoriaselecionada.get(0);
				tipoServico.camposProcura.limpar();		
				tipoServico.camposProcura.add("categoria", categoriaServico.getId().toString(), true);
				tipoServico.camposProcura.setCondicional("and");
			}
		}else{
			System.out.println("categoria NULL");
			return null;
			}
		
		return tipoServico.procura();
	}
	
	
	public List<TipoMarca> getListarTipoMarca(String desctipo){
		
		ArrayList<TipoMarca> retorno = null;
		TipoControle tipoControle = new TipoControle();
		List<Tipo> tiposelecionada = tipoControle.procuraTipo(desctipo, "1");
		
		if(desctipo != ""){
		
		if (tiposelecionada.size() == 1) {			
		Tipo tipoServico = tiposelecionada.get(0);
		tipoMarcaServico.camposProcura.limpar();		
		tipoMarcaServico.camposProcura.add("tipo", tipoServico.getId().toString(), true);
		tipoMarcaServico.camposProcura.setCondicional("and");
		retorno = tipoMarcaServico.procura();
		}else{			
			System.out.println("Tipo NULL");
			retorno = null;
			}
		}
		return retorno;
		
	}
	
	
	
	public List<Modelo> getListarModelo() {

		modeloServico.camposProcura.limpar();
		modeloServico.camposProcura.add("situacao", "1", true);
		modeloServico.camposProcura.setCondicional("and");
		return modeloServico.procura();
	}
	
	
	public List<Modelo> procuraModelo(String descricao, String situacao){
	
		
		modeloServico.camposProcura.limpar();
		
		if(descricao != ""){
		this.getServico().camposProcura.add(("descricao"), descricao, true);
		}
		this.getServico().camposProcura.add(("situacao"), situacao, true);	
		this.getServico().camposProcura.setCondicional("and");
		return modeloServico.procura();
		
	}
	
	public boolean registrarModelo(Modelo modelo){
		boolean retorno;
		retorno = false;
		if(antesProcurar(modelo)){
			if(modelo.getId() == null){
				modelo.setStatus(1);
				modelo.setSituacao(EnumSituacao.ATIVO);
				if(persiste(modelo)){
					retorno = true;
				}
			}
			
		}else{
			retorno = false;
		}
		
		
		return retorno;
	}
	
	public boolean alteraModelo(Modelo modelo){
		boolean retorno;
		retorno = false;
		
			if(antesProcurar(modelo)){
				if(persiste(modelo)){
					retorno = true;
				}
			}else{
				retorno =false;
			}
			
			return retorno;
	}
	
	
}
